/**
 * +---------------------------------------------------------------------------+
 * | W o r d C o u n t e r - program przedstawiajacy statystyke wystepowania   |
 * | slow i podslow w tekscie. Program przechowuje slowka w tablicy haszujacej.|
 * | Do sortowania uzyty jest algorytm QuickSort, zas						   |
 * | o wyszukiwania podslow w tekscie algorytm Knutha-Morrisa-Pratta.		   |
 * | Wszystkie wspomniane algorytmy sa zaimplementowane w kodzie programu.	   |
 * +---------------------------------------------------------------------------+
 *
 * Starter.java
 *
 * Klasa odpowiedzialna za uruchomienie i zarz�dzanie programem wordcounter.
 *
 *
 * @author Mateusz Grzechociński
 *		   mateusz@grzechocinski.net
 *
 * @date 2006-12-16, 20:25:45
 */
package net.grzechocinski.wordcounter;

import net.grzechocinski.wordcounter.KMP.KMP;
import net.grzechocinski.wordcounter.KMP.WordObject;
import net.grzechocinski.wordcounter.comparators.SortOrder;
import net.grzechocinski.wordcounter.core.WordCounter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;

import java.io.File;
import java.io.IOException;
import java.util.*;


public class Starter {

	private static Logger log = org.slf4j.LoggerFactory.getLogger(Starter.class);

	/**
	 * Metoda rozpoczynajaca dzialanie programu
	 *
	 * @param args tablica argumentow z linii polecen. Argumentem jest nzwa pliku.
	 *             Argument moze byc tylko jeden.
	 */
	public static void main(String[] args) {

		String fileName = args[0];
		SortOrder sortOrder = SortOrder.valueOf(Integer.parseInt(args[1]));

		try {
			String toAnalyze = FileUtils.readFileToString(new File(fileName));

			final List<WordObject> wordObjects = WordCounter.analyze(toAnalyze);
			Collections.sort(wordObjects, sortOrder.getComparator());

			print(wordObjects);

		} catch (IOException e) {
			log.error("Error occurred {}",e);
			throw new RuntimeException(e);
		}
	}

	private static void print(List<WordObject> wordObjects) {

		for (int i = 0; i < wordObjects.size(); i++) {
			final WordObject token = wordObjects.get(i);
			if (i < 9) {

				log.info(i + 1 + "  | " + token.getWord() + "\t |   " +
						token.getAloneCounter() + "   |     " + token.getInOtherCounter() +
						"    |      " + token.getAllOccuresCounter() + "      |");
			} else {
				log.info(i + 1 + " | " + token.getWord() + "\t\t  |   " +
						token.getAloneCounter() + "   |     " + token.getInOtherCounter() +
						"    |      " + token.getAllOccuresCounter() + "      |");
			}
		}
		log.info("----------------------------------------------------");
	}
}
